
 PAG
**********************************
*	 EQU1
**********************************

* ERROR NUMBERS

INVCOM = $01 ;INVALID COMMAND
NOADRS = $02 ;ADDRESS EXPECTED
NUMEXP = $03 ;NUMBER EXPECTED
BADPAR = $04 ;BAD COMMAND PARAMTERS

BRKFUL = $10 ;NO ROOM FOR ADDITIONAL BREAKPOINTS

NOWROM = $20 ;COMMAND WILL NOT WORK IN ROM

* ZERO PAGE USAGE

ZBUF1 EQU $20
Z1LO EQU $20
ZBUF2 EQU $21
Z1HI EQU $21
Z2LO EQU $22
Z2HI EQU $23
ZBUF5 EQU $24
ZBUF6 EQU $25
BASL EQU $28
BASH EQU $29
BAS2L EQU $2A
BAS2H EQU $2B
CSWL EQU $36  ;ADDRESS OF OUTPUT ROUTINE STORED HERE.
CSWH EQU $37
KSWL EQU $38  ;ADDRESS OF INPUT ROUTINE STORED HERE.
KSWH EQU $39

BRKVECLO EQU $03F0 ;BREAK VECTOR OF AUTOSTART ROM
BRKVECHI EQU $03F1 ;" " " "
NMILOC EQU $3FB  ;APPLE'S NMI VECTOR
CNSLOT EQU $7F8  ;LAST ACTIVE PERIPHERAL CARD $CN FORM


********** SOFT SWITCHES **********

CXON EQU $C007  ;CXROM ON SWITCH
SLOTROM EQU $C006  ;CXROM OFF SWITCH
CXFLAG EQU $C015  ;CXROM STATUS FLAG

KBD EQU $C000  ;KEYBOARD DATA
KBDSTRB EQU $C010  ;CLEAR KEYBOARD STROBE
SPKR EQU $C030  ;SPEAKER

STR80OFF EQU $C000 ;WRITE, ALLOW TXTPAGE1 TO SWITCH PAGE1/PAGE2
STR80ON EQU $C001  ;WRITE, ALLOW TXTPAGE1 TO SWITCH MAIN/AUX
STORE80 EQU $C018  ;READ

READMAIN EQU $C002 ;READ FROM MAIN MEM (WRITE)
READAUX EQU $C003  ;READ FROM AUX MEM (WRITE)
RAMRD EQU $C013  ;READ

WRITMAIN EQU $C004 ;WRITE TO MAIN MEM (WRITE)
WRITAUX EQU $C005  ;WRITE TO AUX MEM (WRITE)
RAMWRT EQU $C014  ;READ

MAINZP EQU $C008  ;MAIN STACK & ZP (WRITE)
AUXZP EQU $C009  ;AUX STACK & ZP (WRITE)
ALTZP EQU $C016  ;READ
 
COL80OFF EQU $C00C ;80 COL DISPLAY OFF
COL80ON EQU $C00D  ;80 COL DISPLAY ON
RD80VID EQU $C01F  ;BIT 7 = 1 FOR 80 COL, 0 FOR 40 COL

ALTCHOFF EQU $C00E ;WRITE, TURN OFF ALT CHAR SET
ALTCHON EQU $C00F  ;WRITE, TURN ON ALT CHAR SET
ALTCHAR EQU $C01E  ;READ

TEXTOFF EQU $C050  ;TEXT MODE OFF
TEXTON EQU $C051  ;TEXT MODE ON
TEXT EQU $C01A  ;Read TEXT switch

MIXEDOFF EQU $C052 ;ALL TEXT OR GRAPHICS
MIXEDON EQU $C053  ;R/W, MIXED TEXT AND GRAPHICS IF GRAPHICS ON
MIXED EQU $C01B  ;Read MIXED switch

TXTPAGE1 EQU $C054 ;TALK TO MAIN TEXT RAM
TXTPAGE2 EQU $C055 ;TALK TO AUX TEXT RAM
PAGE2 EQU $C01C  ;Read PAGE2 switch

HIRESOFF EQU $C056 ;HIRES MODE OFF
HIRESON EQU $C057  ;HIRES MODE ON
HIRESFLG EQU $C01D ;Read HIRES switch

****************************************


COUT1APL EQU $FDF0 ;USED TO RESTORE CSW IF EXT2 ENTERED WITH PR#N
MONITOR EQU $FF69  ;APPLE MONITOR ENTRY POINT

* ASCII CODES

EOT EQU $84  ;ASCII CODE FOR EOT
BEL EQU $87  ;ASCII BELL CODE
UPARROW EQU $8B  ;APPLE KEY CODE
DNARROW EQU $8A  ;APPLE KEY CODE
RTARROW EQU $95  ;APPLE KEY CODE
LTARROW EQU $88  ;APPLE KEY CODE
CR EQU $8D  ;ASCII CARRIAGE RETURN
LF EQU $8A  ;ASCII LINE FEED
CTRLX EQU $98  ;ASCII CONTROL-X
CTRLS EQU $93  ;ASCII CONTROL-S
ESC EQU $9B  ;ASCII KEY CODE
DELETE EQU $FF  ;APPLE KEY CODE

* SUPER SERIAL CARD LOCATIONS FOR SLOT #2

SSCSTAT EQU $C0A9
SSCDATA EQU $C0A8
SSCCONT EQU $C0AB
SSCDIPS1 EQU $C0A1
SSCDIPS2 EQU $C0A2
SSCCOMAN EQU $C0AA

* VIA BASE ADDRESSES

VIAORB EQU $C810  ;ADDRESS ORB
VIAORA EQU $C801  ;ADDRESS ORA
VIADRB EQU $C802  ;ADDRESS DRB
VIADRA EQU $C803  ;BASE ADDRESS DRA
VIAT1CL EQU $C804  ;VIA TIMER 1
VIAT1CH EQU $C805  ;VIA TIMER 1
VIAT1LL EQU $C806  ;VIA TIMER 1 LATCH LOW
VIAT1LH EQU $C807  ;VIA TIMER 1 LATCH HI
VIAT2CL EQU $C808  ;VIA TIMER 2
VIAT2CH EQU $C809  ;VIA TIMER 2
VIASR EQU $C80A
VIAACR EQU $C80B
VIAPCR EQU $C80C
VIAIFR EQU $C80D  ;VIA INTERRUPT FLAG REGISTER
VIAIER EQU $C80E  ;VIA INTERRUPT ENABLE REGISTER
VIAORAN EQU $C80F

SEGMBASE EQU $C080 ;BASE ADDRESS OF CARD SLOT I/O SPACE.

*-------------------------------------------------
* BREAK STACK POINTERS (VALID ONLY FOR RAM SEG 6)
* 50 BREAKS MAXIMUM
* -------  SPECIAL NOTE ------------
* No group may occupy more than 1 Bank

 DUM $C838  ;LEAVE ROOM AT TOP OF SEG6 FOR VARIABLES

BRKTYPE DS 50  ;BREAK TYPE
BRKPBR DS 50  ;BREAK PBR (BANK #)
BRKHI DS 50  ;HI ADDRESS BYTE
BRKLOW DS 50  ;LOW ADDRESS BYTE
BRKTGHI DS 50  ;TO GO, HI BYTE
BRKTGLOW DS 50 ;TO GO, LOW BYTE
BRKPASHI DS 50 ;TIMES TO PASS, HI BYTE
BRKPASLO DS 50 ;TIMES TO PASS, LOW BYTE
BRKDATA DS 50  ;ORIGINAL DATA BYTE

 DEND

* START ONBOARD RAM

STACKBUF EQU $C900 ;SEGMENT 7 BUFFER FOR USERS STACK

****************************************
* KEEP THESE LOCATIONS IN THE SAME ORDER
* IF POSSIBLE, SO THEY CAN BE PUBLISHED
* FOR THE USERS OWN USE.
****************************************

 DUM $C811

ACC DS 2  ;STORAGE FOR ACCUMULATOR
XREG DS 2  ;STORAGE FOR X REGISTER
YREG DS 2  ;STORAGE FOR Y REGISTER
STACK DS 2  ;STORAGE FOR STACK POINTER
MSTATE DS 1  ;MACHINE STATE
STATUS DS 1  ;STORAGE FOR STATUS REGISTER
PCLO DS 1  ;PROGRAM COUNTER LOW BYTE
PCHI DS 1  ;PROGRAM COUNTER HI BYTE
PBR DS 1  ;STORAGE FOR 65816 PBR REGISTER

INVISIBL DS 1 ;0=NORMAL, NEGATIVE= INVISIBLE

CMOSFLAG DS 1 ;0=6502, BIT 7=1=65C02, BIT 6=1=65816

* SET OFFFLAG TO $80 IF I/O IS SLOT1 OR SERIAL
IOMODE DS 1  ;0=NORMAL, BIT 7=1=SERIAL, BIT 6=1=SLOT1
OFFFLAG DS 1  ;>$80= DON'T DISPLAY TO SCREEN

STRT2FLG DS 1 ;BIT 7 1=NORMAL ENTRY, 0=DO RTS AFTER INIT

*************** END ********************

SLOTN0 DS 1  ;SLOT # FORMAT N0
ADDHI DS 1  ;CURRENT BREAKPOINT ADDRESS BUFFER HI BYTE
ADDLOW DS 1  ;" " " " " LO BYTE
ZBYTE1 DS 1
ZBYTE2 DS 1
ZBYTE3 DS 1

****************************************
** DATABRK - SBTYPE MUST REMAIN TOGETHER BECAUSE OF UPDATE **

DATABRK DS 1  ;DATA FROM BREAKPOINT
LETTER1 DS 1  ;USED IN COMMAND FIND
LETTER2 DS 1  ; " "
LETTER3 DS 1  ; USED IN SEG3 COMDMA
LETTER4 DS 1
LETTER5 DS 1
LETTER6 DS 1
SBTYPE DS 1  ;BREAK TYPE R OR I
***************** END ******************

DECIMAL1 DS 1 ;USED TO CONVERT
DECIMAL2 DS 1 ;LETTER 1,2,3 FROM
DECIMAL3 DS 1 ;DECIMAL TO HEX

PBRADD DS 1  ;PBR FOR STAINDY & LDAINDY
MEMLOW DS 1  ;MEMORY POINTERS USED BY
MEMHI DS 1  ; MM, MD, LI COMMANDS

OPCODE DS 1  ;USED IN SEG3
MLIFLAG DS 1  ;0=MLI WAS DISASSEMBLED
IERBUFF DS 1  ;VIAIER FLAGS

*ENABLT VECTOR. NMI HANDLER (JUMPS) TO THIS LOCATION IF
* TRACE CAUSED THE NMI.
ENABLTVC DS 2
VECTSAVE DS 2 ;Save ENABLTVC here during SKPBRK
STOPBRK DS 1 ;<$80=STOP AT BRK WHEN TOGOFLG=0,>$7F=DON'T STOP
YBUFF DS 1  ;TEMP STORAGE FOR Y BUF
YBUF2 DS 1  ;USED BY TOCOUT
XBUFF DS 1  ;TEMP STORAGE FOR X BUF
SUBTRACE DS 2 ;LOCATION OF SUBROUTINE FOR TRACE
SEGMCODE DS 1 ;CONTAINS CODED INFO ON WHERE TO TRANSFER
MODE DS 1  ;MODE OF INSTRUCTION 01 TO 0D PLUS FF

* WHEN RESTFLAG IS SET IT INDICATES THE I/O ROUTINES HAVE
* BEEN USED WHICH DISTURBED THE SCREEN RAM OR ZPAGE LOCATIONS

RESTFLAG DS 1

**********************************
** PUT CXROM ROUTINES IN THIS	 *
** SPACE. THEY WILL BE RUN FROM	 *
** THE $C080-$C08F CARD I/O SPACE*
**********************************

 ORG $C880

* THIS FIRST BYTE MUST BE AT ADDRESS $C880

 DS 3  ;STA CXON
 DS 2  ;CMP ACTIVE SLOT
ACTVSLOT
 DS 1  ;ACTIVE SLOT
 DS 1  ;LDA OR STA OR PLP,PHP,RTI
LOWADD DS 1  ;SETUP BEFORE RUNNING
HIADD DS 1  ; "      "       "
 DS 3  ;STA SLOTROM
 DS 1  ;RTS
 DS 3
****************************************

*STORE Z PAGE LOCATIONS THAT MIGHT BE DISTURBED BY
* EXT. I/O ROUTINES.

ZPAGEXT DS $C

**********************************
** TCOUNT TO POINT ARE CLEARED TO*
** ZERO DURING STARTUP. KEEP
** THEM TOGETHER
**********************************

TCOUNT DS 2  ;USES DICIMAL NUMBERS 1 - 10000
TFLAG DS 1  ;TRACE FLAG
REALTIME DS 1 ;NOT 0 IF REALTIME WINDOWS ARE SET
PROGONLY DS 1 ;NOT 0 IF PROG ONLY WINDOWS ARE SET
NOACCESS DS 1 ;NOT 0 IF NO ACCESS WINDOWS ARE SET
TRCBRK DS 1  ;A BRK WAS JUST TRACED
BRKWFLG DS 1  ;THE BRK WINDOW NEEDS UPDATING
WINDFLG DS 1  ;>$80 = the windows are on
PASSFLG DS 1  ;SET BY BREAK HANDLER
PASBREAK DS 2 ;PASS THIS BREAKPOINT UNTIL PASSFLAG = 0
EFLAG DS 1  ;SET TO NON ZERO WHEN E COMMAND
RTSFLAG DS 1  ;SET BY ES COMMAND. EXECUTE TO RTS.
EXECFLAG DS 1
TSFLAG DS 1  ;>=$80 IF COMDTS
ETFLAG DS 1  ;USED BY CALCTIME
FLAG80 DS 1

*DISPFLAG FORMAT

*BIT 7 = 80STORE 1=PAGE2 SWITCHES MAIN/AUX
*BIT 6 = VBL (NO USE)
*BIT 5 = TEXT 1=TEXT MODE 0=GRAPHICS MODE
*BIT 4 = MIXED 1=MIXED SCREEN 0=FULL SCREEN
*BIT 3 = PAGE2 1=PAGE2 OR AUX 0=PAGE1 OR MAIN
*BIT 2 = HIRES 1=HIRES 0=LORES
*BIT 1 = ALTCHARSET 1=ALT. CHAR ON 0=ALT. CHAR OFF
*BIT 0 = 80COL 1=80 COL 0=40 COL

DISPFLAG DS 1 ;SAVE DISPLAY SWITCHES

SSCFLAG DS 1  ;>$80= SSC INITIALIZED

* MEMORY TO DISPLAY IN WINDOW
* FORMAT = PBR,HI,LOW

MEMWADR DS 12*3  ;12 LOCATIONS AT 3 BYTES EACH

EFFADRS DS 3  ;EFFECTIVE ADDRESS (LO,HI,PBR)

* MEMORY PROTECTION BUFFERS
* TYPE, PBR, (LOWER LIMIT, HI, LOW) . (UPPER LIMIT, HI, LOW)

PROTADR DS 6*6  ;6 LOCATIONS AT 6 BYTES EACH
TXSFLG DS 1  ;0=LAST INSTR. WAS NOT TXS OR TCS, (TRACEN)

REALBRK DS 1  ;COUNT OF REAL BREAKS
POINT DS 1  ;STACK POINTER FOR BREAKS

************* END INITIALIZED RAM ***************

COMRTFLG DS 1 ;SET NEGATIVE BY COMDRT
RTBRKFLG DS 1 ;SET NEGATIVE BY COMDRT OR RTWINDOW
RTSTK  DS 1 ;SAVE STACK DURING REALTIME
RTOPCODE DS 1 ;SAVE OPCODE REPLACED BY REALTIME BRK

OLDSTACK DS 1 ;SAVE STACK DURING TRACEN
OLDMSTAT DS 1 ;SAVE MSTATE DURING TRACEN

*THE FOLLOWING LOCATIONS ARE USED ONLY DURING
* A SEGMENT CROSSOVER
ASAVESEG DS 1 ;SAVE ACC
XSAVESEG DS 1 ;SAVE X
PSAVESEG DS 1 ;SAVE P
ADDRBUFF DS 3 ;ADDRESS BUFFER
CSWLBUTT DS 1 ;USED IF BUTTON IS PRESSED
CSWHBUTT DS 1
KSWLBUTT DS 1
KSWHBUTT DS 1

* USED BY CALCTIME
ETIERSAV DS 1
ETORASAV DS 1
ETORBSAV DS 1
ETPCLO DS 1
ETPCHI DS 1

OPERAND DS 2  ;USED IN MINI ASSEMBLER TO STORE OPERAND
INITFLAG DS 1 ;INDICATES THE USER PROGRAM HAS BEEN EXECUTED
INTCXSOT DS 1 ;USED TO SAVE THE STATUS OF THE IIE'S CX ROM

INDY80S DS 1  ;INDY SAVES 80STORE FLAG HERE
INDYBUF DS 1  ;INDY SAVES ZP FLAG HERE
STKBUF DS 16  ;SAVE ALT BANK STACK DATA HERE

RAMRDBF DS 1  ;**
RAMWRTBF DS 1 ;** MUST BE CONSECUTIVE

HARDPBR DS 1  ;BANK # OF HARDWARE BREAK

DTOHFLG DS 1  ;DEC TO HEX FLAG >$80 = CONVERT
ADDRS2F DS 1  ;2 ADDRESS ENTERED IF > $80 (ADD.ADD)

*BIT 7=0=NATIVE MODE 65816,
* BIT 7=1=6502 OR 65C02 OR 65816 IN 65C02 MODE

EMULATE DS 1  

CXSTATUS DS 1 ;SAVE CXROM STATUS HERE
SLOTCN DS 1  ;SAVE SLOT # $CN

KEY DS 1  ;STOP COMMAND KEY
PROMPT DS 1
* POINTS TO NEXT FREE LOCATION IN BUFFER
IN DS 30  ;INPUT BUFFER IN EXT RAM

BASBUF DS 4  ;BASL - BAS2H BUFFER
WINDLEFT DS 1
WINDWDTH DS 1
WINDTOP DS 1
WINDBTM DS 1
CURSHORZ DS 1
CURSVERT DS 1
INVFLG DS 1
MEMHORZ DS 1  ;TEMP STORAGE FOR SCREEN POINTER, USED BY COUT

INLENGTH DS 1
MEMPBR DS 1
NUMDISP DS 1
MNEMCOMP DS 2
MFLAG DS 1
TOGOFLG DS 1  ; SET TO 0 BY DECTOGO WHEN BRKTOGO = 0

SELFMOD DS 4  ;RUN SELF MODIFING CODE FROM HERE IN SETDISP

 ORG $C9A0

**** THIS MUST BE AT ADDRESS $C900 OR ABOVE ***

**********************************
** PUT VECTOR HANDLING ROUTINES	 *
** HERE IN RAM. THEY WILL BE	 *
** RUN FROM THE $FFA0-$FFXX SPACE*
**********************************

 DS 61

*** THE FOLLOWING 4 BYTES ARE A ROUTINE LOADED IN SLOT2K
*** AND RUN FROM EXTII RAM SPACE BY TRANSFR

LDATEMP DS 1  ;ROUTINE RUN DURING SEGMENT XFR
TEMPSEG DS 2  ;LDA TEMPSEG
 DS 1  ;ROOM FOR RTS

TEMP DS 3  ;TEMPORARY STORAGE LOCATIONS

* RAM LOCATIONS $C9E6-$C9FF ARE RESERVED FOR VECTORS.

 ORG $C9E6

BRKLO816 DS 1 ;LOW BYTE OF 65816 BRK VECTOR
BRKHI816 DS 1 ;HI BYTE
ABORT DS 2  ;NOT USED BY EXT
NMILO816 DS 1 ;LOW BYTE OF 65816 NMI VECTOR
NMIHI816 DS 1 ;HI BYTE
RESERV16 DS 2 ;NOT USED
IRQ816 DS 2  ;NOT USED BY EXT
 DS 4  ;NOT USED
COP6502 DS 2  ;NOT USED BY EXT
RESERV02 DS 2 ;NOT USED
ABORT02 DS 2  ;NOT USED BY EXT
NMILO DS 1  ;LOW BYTE OF 6502 NMI VECTOR
NMIHI DS 1  ;HI BYTE
RESETLO DS 1  ;LOW BYTE OF RESET VECTOR
RESETHI DS 1  ;HI BYTE
IRQLO DS 1  ;LOW BYTE OF 6502 IRQ/BRK
IRQHI DS 1  ;HI BYTE

 DEND
